This is a random pile of wishes on how SDOS could be
improved 7/30/81.

CC:DUMPBUFFERS should move all file-related data for this
I/O channel (even if there are other files OPEN to that
device) to the disk, including updates made to the file
control block, so that newly entered data is always saved
in case there is a system crash.

A CC:MOUNT system call should exist to mount a disk. in
particular, it make a driver commit to a particular
NBPS, NSPT, NTPC and NCYL. It should return a "Write
Protected" Error if the disk is write protected.

Opening/Creating a file on a disk which has not been used
before should cause the disk id to be fetched. MOUNT cannot
do it because the disk may not necesarily have been opened
as a file device.

+Note that a disk device is an unshareable device; only one
task can have it open at a time.

 SYSCALL:CREATE should check
the drive for write protected, and return that error if so,
refusing to create the file.

SYSCALL:WRITEx should check on the first write to a file
that the drive is not write protected, and return a
"WRite protected" error if so. A zero byte SYSCALL:WRITEx to
the file can be used to determine if the disk holding
the file is Write protected.

Disk drivers should return "Write protect error -- file
system damaged" if they discover a write protected
drive (the checks in CC:MOUNT, SYSCALL:CREATE, and
SYSCALL:WRITEx prevent this from occuring unless some
idiot Write Protects a driver AFTER writes to the device
have occurred). Occurrence of this error should cause the
buffer pool to be reamed of all modified sectors aimed at
that disk.  Furthermore, only the task that issued the write
should get the error, so better accountability is
established.

SDOS should have File Version (relative) Numbers (0 is
current file, 1 is next youngest, 2 is 2nd youngest, etc.)
These file could all be chained together via the header
cluster with the most current being pointed to by the
directory entry.

Files should have a Last Access Date (updated only if the
drive is not write protected), and contiguous files.

Better error accountability is needed. Only the task
requesting an operation should suffer the consequences of
failure of the operation. This means any operation spun off
in paralell must take note of the initiating task; the
initiator cannot be erased from the world until all the
activities started by
him have completed either successfully or with an error.
The killer of a task shall get all errors the task would
normally have gotten had it continued operation.


CREATE should only step on an already existing file name iff
an "!" is appended to the filename notation; otherwise, the
error "File already exists" should be returned.
This same phenomenon should occur whereever a name is about
to be association with a new object, especially in a
capability system.
Add this only when adding multi-level directorys or some
other hack to the file system, to retain compatibility as
long as possible.

Multi-level directorys would be nice. They would be
especially easy to implement with capabilities; then
network-style directorys are easily implemented, as are
diriectorys structures that span several machines.

User accounts would be supremely useful in Multi-User
systems; even in single user systems, having an "account" is
a very nice way to store lotsa user defaults.

It would sure be nice if d5:SDOSDISKVALIDATE worked right.
Perhaps CHAIN could capture an explicitly supplied
device/directory name and change the default for execution
to that directory/device until an EXIT occurred.

SDOSDISKBACKUP ought to run a lot faster.

Need a term for a group of tasks operating in the same
address space, working toward a common goal. How about
OFFICE? The term JOB means any set of offices working towarD
a common goal; by definition, JOBs cannot work together on a
common goal.

A user at a keyboard should be able to detach from the I/O
channel he is currently attached to, and attach himself to
another (perhaps newly created) I/O channel talking to a new
command interpreter, so that he may start a completely
independent activity. This would allow foreground/background
activities to be run as needed.

Users need protection against each other: file protection,
execution protection, and safety of user profiles. I think
this requires accounts and Logons.

Need to be able to add device drivers dynamically to system,
including linking into interrupt chains, etc.


RealTime kernal -- provides task management of tasks in same
space. Post, Wait, Lock, Unlock, semaphore;clock mgmt;
timeouts and accurate delays needed. Interrupt poll chain,
device I/O interface like SDOS's would be very useful.

Want a family of SDOS operating systems, from RT kernal to
superSDOS running in 68,000,000,000.

CC:SETMAP entry point for disk drivers? Perhaps this can be
done at CC:MOUNT time.

A copy of the directory entry should be kept in the header
cluster to aid disaster recovery. In fact, the directory.sys
file should really only be an optimizing data structure, and
not a critical one for system operation.

A program should be encryptable for operation on only a
specified (set of) CPUs.

There should be a way to get the device type, given the
name of the device, without opening it.  Non-sharable
devices should object if more than a single task
attempts to open it simultaneously. A task should be
able to determine if two open channels (capabilities)
represent the same device so it can handle things like
multiple outputs directed to the same device.

A Sharable device should not object if opened multiple
times.

CC:DISMOUNT should return error summary status if
non-zero reply buffer given, including last LSN that
caused the error counts to be updated.
Clears errorstats.

READA should return an error if the reply buffer was not
large enough to hold the activation character.



Tasks should be able to get as large a chunk of page zero as
needed.  ??How useful is this? Makes for smaller code
(10-20%), makes for faster code (10-20%). need what amounts
to a local stack frame for each routine for re-entrancy
purposes.
17us*256=4352Us --> 8.7ms context switch, worst case.

Extended address space SDOS so user can run in a differenct
bank of memory.

John Hemak rates SDOS priorities as follows:
1) Dynamically loadable drivers
2) Multi-tasking facilities
3) Local netting
4) 6809/Mulit user

How about
activiation tables on files? (like VT driver).

TImeshare v1.2 needs:
1) Delay SYSCall
2) Spooler
3) SDNET interface?
4) Decrypting loader
5) LOgon/Logoff program
6) kill proff/kill enable for user programs.

SDOS wish list from Joe Young:
   1) Multitasking
   2) Interprocess commmunication (pipes, for instance)
   3) Evencts (wait, post with code, etc.)
   4) Acxtivation set for Read ascii
   5) Stack limit checking on tasks
   6) Multiple regions within user space (spoolers)
   7) Seprate I/O channels for each task.
   8) Suspend for timed period

SDOS 1.1: move drive error status call fetch and
clear into SDOS proper. Write sequntially modified sectors,
then verify sequentially would spped up writes enormously.

 Modify DELETE to kill directory entry
completely (ie. zero file name). Faster disk I/O.
Read and ignore product code record in object files.
Dismount should zero error statistics.
Decrypting loader.
Allow specification of block move
routine via CNFG*: entry in SDOS1.1

Needs spooler very badly. Want easy-to-user multi-user/task
interlocks. Allow device names in the directory.

Add Capabilities; make SDOS do what SDOS/MT is doing now,
decrypting loader, Add keyed file logic to SDOS as syscall
(perhaps implement overlya areas to minimize storage used?)
Raise interest level of header
cluser sectors in Pool so they stick around more.


stick syscall blocks into stack for re-entrant processing.

RDSI to hold ripped apart LSN and error code for sector.

In Exit chekc interrupt stack base to make sure it has not
overflowed; zero bottom of stack in INIT.

Kill readahead request if an actual read is required.?

Do readahed if seq file or if rand file and avg read size >
1/2 sector size.

All use of disk id instead of disk device name.

Use reference counts on RDSIs.



Add real contiguous files.

Make IOCB pointer available in page zero?

User assignable device names?

An error on a Read-ahead sector (i.e., an optimizing
    operation that is not needed to correctly complete a
    task's request) should not notify anybody; it should
    simply clean up its own mess and disappear.

Allow CC:SETACTBLK on files; simulate cc:Tabs correctly

Make SDOS Cognizant of contiguous sets of
    disk clusters in a file so it doesn't have to fetch the
    header block as often.

Do sequential write of dirty pages.

Let defaultprogram open DIRECTORY.SYS fast --> mod SDOSDISKINIT to
set up BOOT:DIRLSN properly.

Add Blockmove K,x to L,y for Z bytes.
SDOS disk files should operate identically to VT driver
    spec on Ascii reads/writes.

